/**
 * 主将训练系统详细测试脚本
 * 测试1204、1205、1207指令并显示详细响应
 */

const WebSocket = require('ws');

class CharacterTrainingTester {
  constructor() {
    this.ws = null;
    this.messageCount = 0;
  }

  async runTest() {
    try {
      console.log('🚀 开始主将训练系统详细测试...\n');

      // 直接连接WebSocket（使用已知的token）
      await this.connectWebSocket();

      // 等待一下让连接稳定
      await this.sleep(1000);

      // 测试1204指令 - 获取训练信息
      await this.testGetTrainingInfo();

      // 等待响应
      await this.sleep(2000);

      // 测试1205指令 - 获取训练详情
      await this.testGetTrainingDetails();

      // 等待响应
      await this.sleep(2000);

      // 测试1207指令 - 开始训练
      await this.testStartTraining();

      // 等待响应
      await this.sleep(2000);

      console.log('\n🎉 主将训练系统测试完成！');

    } catch (error) {
      console.error('❌ 测试失败:', error.message);
    } finally {
      if (this.ws) {
        this.ws.close();
        console.log('🔌 WebSocket连接已关闭');
      }
    }
  }

  sleep(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
  }

  async connectWebSocket() {
    console.log('🔌 步骤1: WebSocket连接测试...');
    
    return new Promise((resolve, reject) => {
      // 使用一个测试token
      const wsUrl = `ws://localhost:3000/user-service/websocket?token=test-token`;
      console.log(`📡 连接URL: ${wsUrl}`);
      this.ws = new WebSocket(wsUrl);

      this.ws.on('open', () => {
        console.log('✅ WebSocket连接成功');
        resolve();
      });

      this.ws.on('error', (error) => {
        console.error('❌ WebSocket连接失败:', error.message);
        reject(error);
      });

      this.ws.on('message', (data) => {
        this.messageCount++;
        try {
          const message = JSON.parse(data.toString());
          console.log(`📨 收到消息 #${this.messageCount}:`, JSON.stringify(message, null, 2));
        } catch (error) {
          console.log(`📨 收到原始消息 #${this.messageCount}:`, data.toString());
        }
      });

      this.ws.on('close', (code, reason) => {
        console.log(`🔌 WebSocket连接关闭: ${code} - ${reason}`);
      });
    });
  }

  async testGetTrainingInfo() {
    console.log('\n🏋️ 步骤2: 测试1204指令 - 获取训练信息...');
    
    const message = { c: 1204 };
    this.ws.send(JSON.stringify(message));
    console.log('📤 发送消息:', JSON.stringify(message, null, 2));
  }

  async testGetTrainingDetails() {
    console.log('\n📊 步骤3: 测试1205指令 - 获取训练详情...');
    
    const message = { c: 1205 };
    this.ws.send(JSON.stringify(message));
    console.log('📤 发送消息:', JSON.stringify(message, null, 2));
  }

  async testStartTraining() {
    console.log('\n🚀 步骤4: 测试1207指令 - 开始训练...');
    
    const message = { c: 1207, d: { h: 10 } };
    this.ws.send(JSON.stringify(message));
    console.log('📤 发送消息:', JSON.stringify(message, null, 2));
  }
}

// 运行测试
if (require.main === module) {
  const tester = new CharacterTrainingTester();
  tester.runTest().catch((error) => {
    console.error('💥 测试执行失败:', error.message);
    process.exit(1);
  });
}

module.exports = { CharacterTrainingTester };
